#pragma once
#include <list>
#include "resource.h"

/**
 * Klasa menedzera zasobow.
 *
 * @author Krzysztof Klein
 * @version 0.1
 */
class ResourceManager
{
	/**
	 * Lista zaladowanych zasobow
	 */
	std::list<Resource*> resources;

public:

	/**
	 * Konstruktor domyslny
	 */
	ResourceManager();

	/**
	 * Destruktor
	 */
	~ResourceManager();


	/**
	 * Dodaje (laduje) zasob z pliku.
	 *
	 * @param fileName Nazwa pliku
	 * @param type Typ zasobu
	 * @return Zaladowany zasob lub NULL jesli wystapil blad.
	 */
	Resource* addResource(const std::string &fileName, Resource::Type type);


	/**
	 * Dodaje wiele zasobow.
	 *
	 * @param fileNameMask Maska nazwy pliku (np "*.bmp")
	 * @param type Typ zasobow
	 * @param ignoreFails Ignoruje niepowodzenie ladowania zasobu
	 * @return True jesli pomyslnie zaladowano pasujace pliki, false jesli nie.
	 */
	bool addResources(const std::string &fileNameMask, Resource::Type type, bool ignoreFails = false);


	/**
	 * Zwraca zasob po jego nazwie (nazwie pliku).
	 */
	Resource* getResourceByName(const std::string &resourceName) const;

	/**
	 * Zwraca liste zaladowanych zasobow.
	 *
	 * @return Lista zasobow
	 */
	const std::list<Resource*>& getResourceList() const { return resources; }
	std::list<Resource*>& getResourceList() { return resources; }


	/**
	 * Tworzy zasob zapisanej gry.
	 */
	typedef struct
	{
		int a;
		int b;
		char txt[20];
	} SavedGameState;
	Resource* createSavedGameResource(const SavedGameState &state,
		const std::string &fileName);
};
